home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / AllPlaton / StrikeCommander / StrikeCommander16.AMOS / StrikeCommander16.amosSourceCode < prev   
Encoding:
AMOS Source Code  |  1993-08-19  |  14.5 KB  |  548 lines

  1. ' *****************************************
  2. ' *                                       *
  3. ' *         Strike Commander V1.0         *
  4. ' *        Written by Chris Hodges        *
  5. ' *       Graphics by  Peter Hodges       *
  6. ' *  Additional ideas by  Thomas B�ttner  *
  7. ' *                                       *
  8. ' *****************************************
  9. '
  10. Dim SC(1),X(1),Y(1),M(1),I(1),SX(1),SY(1),ACC(1),SH(1),RX(39),RY(39)
  11. Dim COI(1),COMP(1)
  12. Dim T$(33)
  13. 'RIPGRAPHICS 
  14. Do 
  15.   Gosub TITLE
  16.   Load "StrikeCommander.sam",5
  17.   ACCL=1 : COMP(0)=1 : COMP(1)=0
  18.   Gosub RAWINIT
  19.   Gosub MAIN
  20.   Erase 5
  21. Loop 
  22. End 
  23. TITLE:
  24.   Hide 
  25.   Track Load "StrikeCommander.mus",3
  26.   Track Loop On : Track Play 
  27.   Unpack 10 To 0 : Screen Hide 
  28.   Get Block 1,48,0,224,80
  29.   Screen Open 1,320,256,4096,0
  30.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  31.   Get Palette 0
  32.   For A=0 To 127
  33.     Screen Copy 0,0,A*2,320,A*2+1 To 1,0,A*2
  34.     Screen Copy 0,0,255-A*2,320,256-A*2 To 1,0,255-A*2
  35.     If A and 1 Then Wait Vbl 
  36.   Next 
  37.   Screen Open 0,320,80,64,0 : Screen Hide 
  38.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  39.   Ink 1,0
  40.   Gr Writing 0
  41.   T$(0)="" : T$(1)="" : T$(2)="" : T$(3)=""
  42.   T$(4)="" : T$(5)=""
  43.   T$(6)="Strike Commander" : T$(7)="** 68000 Version **"
  44.   T$(8)="Written by Chris Hodges" : T$(9)=""
  45.   T$(10)="Graphics by Peter Hodges" : T$(11)=""
  46.   T$(12)="Additional ideas and help by" : T$(13)="Thomas B�ttner"
  47.   T$(14)="" : T$(15)="Inspired by the game"
  48.   T$(16)="Biplanes by Peter Mason" : T$(17)=""
  49.   T$(18)="" : T$(19)="Control:"
  50.   T$(20)="Up    Accelerate    " : T$(21)="Left  Clockwise     "
  51.   T$(22)="Right Anti-clockwise" : T$(23)="Down  Brake         "
  52.   T$(24)="" : T$(25)="To activate second player"
  53.   T$(26)="press the button on joystick" : T$(27)="in the mouseport."
  54.   T$(28)="" : T$(29)="Enjoy the game!" : T$(30)=""
  55.   T$(31)="" : T$(32)="" : T$(33)=""
  56.   O=30 : P=7
  57.   Repeat 
  58.     Put Block 1
  59.     For A=0 To 10
  60.       X=160-Len(T$((A+O) mod 34))*4
  61.       Y=A*8+P-2
  62.       T$=T$((A+O) mod 34)
  63.       Ink 0 : Text X+1,Y+1,T$
  64.       Ink 63-Max(Y-60,0)/2-Max(20-Y,0)/2 : Text X,Y,T$
  65.     Next 
  66.     While Timer<4 : Wait Vbl : Wend 
  67.     Wait Vbl 
  68.     While Peek($DFF006)<Y Hard(80) : Wend 
  69.     Timer=0
  70.     Screen Copy 0,48,0,272,80 To 1,48,0
  71.     Dec P : If P<0 Then Add O,1,0 To 33 : P=7
  72.     I$=Inkey$
  73.   Until(I$<>"") or(Fire(1) or Fire(0))
  74.   Cls 0
  75.   Del Block 1
  76.   Screen 1
  77.   For A=0 To 127
  78.     Screen Copy 0,0,0,320,1 To 1,0,A*2
  79.     Screen Copy 0,0,0,320,1 To 1,0,255-A*2
  80.     If A and 1 Then Wait Vbl 
  81.   Next 
  82.   Track Stop 
  83.   Screen Close 0
  84.   Screen Close 1
  85.   Erase 3
  86.   If Asc(I$)=27 Then End 
  87. Return 
  88. MAIN:
  89.   Gosub INIT
  90.   Do 
  91.     If Fire(0) Then COMP(0)=0
  92.     Bob Draw 
  93.     Screen Swap 
  94.     Wait Vbl : T=Timer
  95.     Bob Clear 
  96.     For TI=1 To Min(T,8)
  97.       Gosub EXTRAS
  98.       For A=0 To 1
  99.         If I(A)>-1 Then Gosub STEERING Else Gosub EXLOSI
  100.         SAMSPEED[1+A,5000+Abs(M(A))*70]
  101.       Next 
  102.     Next 
  103.     Timer=0
  104.     If GAMEOVER Then Gosub GAMEOVER Else Gosub INGAME
  105.     I$=Upper$(Inkey$)
  106.     If I$="P" Then Gosub PAUSE
  107.     Exit If Asc(I$)=27
  108.   Loop 
  109.   Sam Stop 
  110.   Fade 2 : Wait 33 : Amal Off : Bob Off 
  111.   Screen 1 : Rainbow Del : View 
  112.   Fade 1 : Wait 17
  113.   Screen Close 0
  114.   Screen Close 1
  115. Return 
  116. EXTRAS:
  117.   If LEMX>-1 Then Gosub LEMMING
  118.   If Rnd(2000)=0 and LEMX=-1 Then LEMX=0 : LEMY=168 : LEMI=0 : Sam Play K,6 : Gosub CHCH
  119.   If SMILY>-1 Then Gosub SMILY
  120.   If Rnd(2000)=0 and SMILY=-1 Then Inc SMILY : Sam Play K,7 : Gosub CHCH
  121.   If UFOI>-1 Then Gosub UFO
  122.   If Rnd(1000)=0 and UFOI=-1 Then Inc UFOI : If GAMEOVER=0 Then Sam Play 8,1 : Gosub CHCH
  123.   If TSX<>0 Then Gosub TURM
  124. Return 
  125. CHCH:
  126.   If UFOI>-1 Then Sam Loop On : Sam Loop On 4 : K=4 Else Sam Loop On 8 : K=12-K
  127.   If GAMEOVER>0 and UFOI>-1 Then Sam Loop On 8
  128. Return 
  129. PAUSE:
  130.   TT=Timer : Sam Stop 11
  131.   Screen 1 : Home : Centre "GAME PAUSED!"
  132.   While(Inkey$="") and Fire(0)=0 and Fire(1)=0
  133.     Bob Draw 
  134.     Screen Swap 
  135.     Multi Wait 
  136.     Bob Clear 
  137.   Wend 
  138.   Centre "            " : Screen 0
  139.   If GAMEOVER Then Timer=TT : Return 
  140.   Sam Play 1,2,5000
  141.   Sam Play 2,2,5000
  142.   If UFOI>-1 and UFOI<4 Then Sam Play 8,1 : Gosub CHCH
  143.   Timer=TT
  144. Return 
  145. GAMEOVER:
  146.   Inc GAMEOVER
  147.   If(Fire(0) or Fire(1)) and(GAMEOVER>50) Then GAMEOVER=Max(GAMEOVER,1000)
  148.   If GAMEOVER=19 Then Bob Off 12 : Bob Off 13
  149.   If GAMEOVER=1000 Then Fade 2
  150.   If GAMEOVER=1062 Then Screen 1 : Fade 1 : Screen 0
  151.   If GAMEOVER=1078 Then Gosub INIT
  152. Return 
  153. SMILY:
  154.   Inc SMILY : If SMILY>38 Then SMILY=-1 : Bob Off 6
  155.   Bob 6,175,125,74-Abs(SMILY/3-6)
  156. Return 
  157. LEMMING:
  158.   Inc LEMX : Add LEMI,1,0 To 20
  159.   If LEMX>637 Then LEMX=-1 : Bob Off 7 : Return 
  160.   While Point(LEMX/2,LEMY)<>7 : Dec LEMY : Wend 
  161.   While Point(LEMX/2,LEMY+1)=7 : Inc LEMY : Wend 
  162.   Bob 7,LEMX/2,LEMY,LEMI/3+80
  163. Return 
  164. UFO:
  165.   If UFOI>3 Then Goto UFOEXPLO
  166.   Inc UFOY
  167.   Add UFOX,Rnd(2)-1
  168.   Add UFOI,1,0 To 3
  169.   If UFOY>400 Then Add UFOX,Sgn(UFOX-160)*8
  170.   If UFOX<-8 or UFOX>324
  171.     UFOI=-1 : UFOX=160 : UFOY=-8 : Sam Stop 8
  172.     Bob Off 8
  173.     Return 
  174.   End If 
  175.   Bob 8,UFOX,UFOY/3,UFOI+64
  176. Return 
  177. UFOEXPLO:
  178.   If UFOI=25 Then UFOI=-1 : UFOX=160 : UFOY=-8 : Bob Off 8 : Return 
  179.   Inc UFOI
  180.   Bob 8,UFOX,UFOY/3,UFOI+37
  181. Return 
  182. TURM:
  183.   Add TX,TSX : Add TY,TSY
  184.   If TY>22100 Then TY=22100 : TSY=0 : TSX=0
  185.   Add TSY,8
  186.   X=TX/100 : Y=TY/100
  187.   If OTX<>X or OTY<>Y Then Bob 9,X,Y, : OTX=X : OTY=Y
  188. Return 
  189. INGAME:
  190.   Gosub KOLLISION
  191.   If SC(0)=20 or SC(1)=20
  192.     Inc GAMEOVER : Sam Stop 11 : Screen Offset 0,0,15
  193.     Screen 1 : Home : Centre "GAME OVER!" : Screen 0
  194.   End If 
  195. Return 
  196. RAWINIT:
  197.   Hide 
  198.   Randomize Timer
  199.   Wait Vbl : Timer=0
  200.   Degree 
  201.   For A=0 To 39
  202.     RX(A)=Cos(A*9)*100
  203.     RY(A)=Sin(A*9)*100
  204.   Next 
  205.   Sam Bank 5
  206.   Volume 15,63
  207.   Screen Open 1,320,17,2,0
  208.   Curs Off : Paper 0 : Pen 1 : Cls 
  209.   Palette 0,0
  210.   Screen Display 1,128,281,320,8
  211.   Screen Open 0,320,256,16,0
  212.   Curs Off : Flash Off : Paper 0 : Pen 1
  213.   For A=0 To 31 : Colour A,0 : Next 
  214.   Screen Display 0,128,40,320,240
  215.   Screen Offset 0,0,15
  216.   Double Buffer 
  217.   Autoback 0
  218.   Bob Update Off 
  219. Return 
  220. INIT:
  221.   Rainbow Del : View 
  222.   For A=1 To 28
  223.     Trap Bob A,-50,-50,
  224.   Next 
  225.   Bob Draw : Screen Swap : Wait Vbl : Bob Clear 
  226.   Bob Draw : Screen Swap : Wait Vbl : Bob Clear 
  227.   Gosub INITSHOTS
  228.   Cls 7
  229.   'Make Mask 
  230.   Paste Bob 0,100,100
  231.   Paste Bob 0,250,101
  232.   Set Rainbow 0,7,256,"","",""
  233.   On Rnd(2)+1 Gosub NIGHT,DAYDAWN,DAYLIGHT
  234.   Screen Copy Logic(0) To Physic(0)
  235.   Bob 9,160,221,104 : TX=16000 : TY=22100 : TSX=0 : TSY=0
  236.   BETTERRAIN[0,255]
  237.   Screen 1 : Cls : Fade 1,0,$FFF : Screen 0 : Wait 16
  238.   Rainbow 0,0,38,256
  239.   For A=0 To 1
  240.     I(A)=A*20 : X(A)=A*31900 : Y(A)=24800 : COI(A)=I(A)
  241.     SX(A)=0 : SY(A)=0 : M(A)=0 : ACC(A)=0
  242.     SC(A)=0
  243.   Next 
  244.   Gosub UPSCORE
  245.   Fade 2 To -1
  246.   Sam Loop On 
  247.   Sam Play 1,2,5000
  248.   Sam Play 2,2,5000
  249.   Sam Loop On 4
  250.   Timer=0 : GAMEOVER=0
  251.   LEMX=-1 : SMILY=-1
  252.   UFOI=-1 : UFOX=160 : UFOY=-8 : K=8
  253. Return 
  254. KOLLISION:
  255.   If I(0)>-1
  256.     If Bob Col(10,8 To 23)
  257.       If Col(9)
  258.         TSX=SX(0)/5 : TSY=-50+SY(0)/10
  259.         I(0)=-1
  260.       End If 
  261.       If Col(11) or(Col(8) and(UFOI>-1 and UFOI<4))
  262.         I(0)=-1 : SC(1)=SC(1)+Col(11)
  263.       End If 
  264.       If Col(22) or Col(23)
  265.         If Rnd(3)>1
  266.           Sam Play K,3 : Gosub CHCH
  267.         Else 
  268.           I(0)=-1
  269.         End If 
  270.       End If 
  271.     End If 
  272.   End If 
  273.   If I(1)>-1
  274.     If Bob Col(11,8 To 23)
  275.       If Col(9)
  276.         TSX=SX(1)/5 : TSY=-50+SY(1)/10
  277.         I(1)=-1
  278.       End If 
  279.       If Col(10) or(Col(8) and(UFOI>-1 and UFOI<4))
  280.         I(1)=-1 : SC(0)=SC(0)+Col(10)
  281.       End If 
  282.       If Col(20) or Col(21)
  283.         If Rnd(3)>1
  284.           Sam Play K,3 : Gosub CHCH
  285.         Else 
  286.           I(1)=-1
  287.         End If 
  288.       End If 
  289.     End If 
  290.   End If 
  291.   If UFOI>-1
  292.     If Bob Col(8,20 To 23) and(UFOI>-1 and UFOI<4)
  293.       UFOI=4
  294.       Sam Play 4,4 : Sam Stop 8 : Gosub CHCH
  295.       If Col(20) or Col(21)
  296.         Inc SC(0)
  297.       End If 
  298.       If Col(22) or Col(23)
  299.         Inc SC(1)
  300.       End If 
  301.       Gosub UPSCORE
  302.     End If 
  303.   End If 
  304.   For A=0 To 3
  305.     If Bob Col(20+A,8 To 12) and Amreg(A,4)>1 Then Amreg(A,4)=1
  306.   Next 
  307. Return 
  308. UPSCORE:
  309.   Screen 1
  310.   If SC(0)<10 Then A$="0" Else A$=""
  311.   A$=A$+Mid$(Str$(SC(0)),2)+At(38,0)
  312.   Home 
  313.   If SC(1)<10 Then A$=A$+"0"
  314.   A$=A$+Mid$(Str$(SC(1)),2)
  315.   Print A$;
  316.   Screen 0
  317. Return 
  318. INITSHOTS:
  319.   A$="J B; "
  320.   A$=A$+"A: L X=R0/100; L Y=R1/100; L R0=R0+R2; L R1=R1+R3; L R5=R5+1; P; "
  321.   A$=A$+"I R0<0 J E; I R0>31900 J D; I R1<0 J B; "
  322.   A$=A$+"F: I R1>24800 J B; I R4=1 J B; I R5>50 J B; J A; "
  323.   A$=A$+"B: L R0=-90000; L R1=-90000; L X=-10; L Y=-10; L R4=1; L R5=0; C: P; I R4=0 J A; J C; "
  324.   A$=A$+"D: L R0=R0-32000; J F;"
  325.   A$=A$+"E: L R0=R0+32000; J F;"
  326.   For A=0 To 3
  327.     Bob 20+A,-10,-10,98+A/2
  328.     Channel A To Bob 20+A
  329.     Amal A,A$
  330.   Next 
  331.   Amal On 
  332. Return 
  333. DAYDAWN:
  334.   Paste Bob 240,132,102
  335.   C0=0 : C1=0
  336.   For A=0 To 165
  337.     Rain(0,A)=C0*$100+C1*$10
  338.     If A mod 8=0 and C0=15 Then Inc C1
  339.     If A mod 8=0 Then C0=Min(C0+1,15)
  340.   Next 
  341.   For A=0 To 89
  342.     Rain(0,A+166)=Min(4+A/5,15)+Max(A/7-8,0)*$10
  343.   Next 
  344. Return 
  345. DAYLIGHT:
  346.   C0=0 : C1=8
  347.   Ink 8
  348.   Circle 100,50,8
  349.   Paint 100,50,1
  350.   For A=0 To 165
  351.     Rain(0,A)=C0*$100+C1*$10+15
  352.     If A mod 12=0 and C1=15 Then Inc C0
  353.     If A mod 8=0 Then C1=Min(C1+1,15)
  354.   Next 
  355.   For A=0 To 89
  356.     Rain(0,A+166)=Min(4+A/4,15)+Max(A/8-8,0)*$10
  357.   Next 
  358. Return 
  359. NIGHT:
  360.   For A=0 To 99
  361.     X=Rnd(320)
  362.     Y=Rnd(150)
  363.     If Point(X,Y)=7 Then Plot X,Y,Rnd(3)+1
  364.   Next 
  365.   Paste Bob 216,64,63
  366.   C0=4 : C2=0
  367.   For A=0 To 165
  368.     Rain(0,A)=C0*$100+C2
  369.     If A mod 14=0 and C0=0 Then Inc C2
  370.     If A mod 8=0 Then C0=Max(C0-1,0)
  371.   Next 
  372.   For A=0 To 89
  373.     Rain(0,A+166)=Min(4+A/10,15)+Max(A/7-8,0)*$10
  374.   Next 
  375. Return 
  376. EXLOSI:
  377.   If GAMEOVER
  378.     I(A)=(I Bob(10+A)-A*20-1)*2
  379.     If Y(A)>24900 and SY(A)>0 : SY(A)=-Max((SY(A)*3)/2,-300) : End If 
  380.     Add X(A),SX(A),0 To 31900
  381.     Return 
  382.   End If 
  383.     If I(A)=-1 Then Sam Play K,4 : M(A)=0 : Inc SC(1-A) : Gosub UPSCORE : Gosub CHCH
  384.   If I(A)>-13 Then Screen Offset 0,0,10+Rnd(4) Else Screen Offset 0,0,15
  385.   If I(A)<-10 Then Bob Off 10+A Else Bob 10+A,X(A)/100,Y(A)/100,
  386.   If I(A)<-21 Then Bob Off 12+A Else Bob 12+A,X(A)/100,Y(A)/100,41+Abs(I(A))
  387.   Dec I(A)
  388.   SX(A)=SX(A)-SX(A)/8
  389.   SY(A)=SY(A)-SY(A)/8+20
  390.   Add X(A),SX(A),0 To 31900
  391.   Add Y(A),SY(A)
  392.   If Y(A)>24900 and SY(A)>0 Then SY(A)=-SY(A)
  393.   If I(A)<-40
  394.     I(A)=A*20 : X(A)=A*31900 : Y(A)=24800
  395.     SX(A)=0 : SY(A)=0 : M(A)=0 : ACC(A)=0 : COI(A)=I(A)
  396.   End If 
  397. Return 
  398. STEERING:
  399.   Bob 10+A,X(A)/100,Y(A)/100,1+A*20+I(A)/2
  400.   If COMP(A)=1 Then Goto COMPMOVE
  401.   If Jleft(A) Then Add I(A),-1,0 To 39
  402.   If Jright(A) Then Add I(A),1,0 To 39
  403.   If Jdown(A) and M(A)>0 Then M(A)=Max(M(A)-3,0) : ACC(A)=0
  404.   If Y(A)=24800 Then Gosub STAR Else Gosub FLIGHT
  405.   Add X(A),SX(A),0 To 31900
  406.   Add Y(A),SY(A)
  407.   If Y(A)<1500 Then Y(A)=1500 : M(A)=0 : SY(A)=0
  408.   If Y(A)>24900 Then I(A)=-1
  409. Return 
  410. COMPMOVE:
  411.   If Y(A)=24800 Then Gosub COMPSTAR Else Gosub COMPFLIGHT
  412.   Add X(A),SX(A),0 To 31900
  413.   Add Y(A),SY(A)
  414.   If Y(A)<1500 Then Y(A)=1500 : M(A)=0 : SY(A)=0
  415.   If Y(A)>24900 Then I(A)=-1
  416.   If I(A)<0 Then Return 
  417.   If A=0 and COI(A)>9 and COI(A)<20 and I(A)<10 Then COI(A)=20-COI(A)
  418.   If A=1 and I(A)>9 and I(A)<20 and COI(A)<10 Then COI(A)=20-COI(A)
  419.   If A=0 and COI(A)>19 and COI(A)<30 and I(A)>29 Then COI(A)=40-(COI(A)-20)
  420.   If A=1 and I(A)>19 and I(A)<30 and COI(A)>29 Then COI(A)=40-(COI(A)-20)
  421.   S=COI(A)-I(A)
  422.   If Abs(S)<39-Abs(S)
  423.     Add I(A),Sgn(S),0 To 39
  424.   Else 
  425.     Add I(A),-Sgn(S),0 To 39
  426.   End If 
  427. Return 
  428. COMPSTAR:
  429.   If M(A)<100 and(M(1-A)>0 or M(A)>0) Then Inc M(A)
  430.   If M(A)>60 Then COI(A)=36+Rnd(2)
  431.   SX=(M(A)*RX(I(A)))/32
  432.   SY=(M(A)*RY(I(A)))/32
  433.   Add SX(A),Max(Min(SX-SX(A),50),-50)
  434.   Add SY(A),Max(Min(SY-SY(A),50),-50)
  435. Return 
  436. COMPFLIGHT:
  437.   If M(A)>50 and M(A)<100 Then Inc M(A)
  438.   D=M(A)*20
  439.   If Abs(X(A)-X(1-A))+Abs(Y(A)-Y(1-A))<D*6 Then Add COI(A),Sgn(Y(A)-Y(1-A)),0 To 39
  440.   If Rnd(50)=0 and I(A)=COI(A) Then COI(A)=Rnd(39)
  441.   If Y(A)>22500-D Then COI(A)=38-(Y(A)-23000+D)/1000
  442.   If Y(A)<4000+D Then COI(A)=8-((Y(A)-D)/500)
  443.   DT=Abs(X(A)-TX)+Abs(Y(A)-TY)
  444.   If DT<5000+D Then COI(A)=34
  445.   SX=(M(A)*RX(I(A)))/32
  446.   SY=(M(A)*RY(I(A)))/32
  447.   For S=(1-A)*2 To(1-A)*2+1
  448.     DT=Abs(Amreg(S,0)-X(A))+Abs(Amreg(S,1)-Y(A))
  449.     If DT<3000 and I(A)=COI(A) Then COI(A)=Rnd(39)
  450.   Next 
  451.   If M(A)>50
  452.     If M(A)<70 : Add Y(A),70-M(A) : End If 
  453.     If M(A)<60 : COI(A)=36+Rnd(3) : End If 
  454.     Add SX(A),Max(Min(SX-SX(A),50),-50)
  455.     Add SY(A),Max(Min(SY-SY(A),50),-50)
  456.   Else 
  457.     COI(A)=10
  458.     SY(A)=Min(SY(A)+4,300) : SY=SY(A) : Dec M(A)
  459.     If SY>250 and I(A)>7 and I(A)<13
  460.       M(A)=Max(M(A),51)
  461.     End If 
  462.   End If 
  463.   If Abs(X(A)-X(1-A))+Abs(Y(A)-Y(1-A))<D*6 Then Add COI(A),A*2-1,0 To 39
  464.   S=Sgn(RY(I(A))/85)
  465.   If M(A)>30 Then M(A)=Max(Min(M(A)+S*3-Abs(S),150),0)
  466.   If Rnd(30)=0 and(Amreg(A*2,4)=1 or Amreg(A*2+1,4)=1)
  467.     Sam Play K,5,8000 : Gosub CHCH
  468.     If Amreg(A*2,4)=1 : S=A*2 : Else S=A*2+1 : End If 
  469.     Amreg(S,0)=X(A)+SX(A)*2
  470.     Amreg(S,1)=Y(A)+SY(A)*2
  471.     Amreg(S,2)=RX(I(A))*6
  472.     Amreg(S,3)=RY(I(A))*6
  473.     Amreg(S,4)=0
  474.   End If 
  475. Return 
  476. STAR:
  477.   If(Jup(A) or ACC(A)) and M(A)<100 Then Inc M(A) : If ACCL Then ACC(A)=1
  478.   SX=(M(A)*RX(I(A)))/32
  479.   SY=(M(A)*RY(I(A)))/32
  480.   Add SX(A),Max(Min(SX-SX(A),50),-50)
  481.   Add SY(A),Max(Min(SY-SY(A),50),-50)
  482.   If I(A)<>A*20 and M(A)=0 Then I(A)=-1
  483. Return 
  484. FLIGHT:
  485.   If(Jup(A) or ACC(A)) and M(A)>50 and M(A)<100 Then Inc M(A) : If ACCL Then ACC(A)=1
  486.   SX=(M(A)*RX(I(A)))/32
  487.   SY=(M(A)*RY(I(A)))/32
  488.   If M(A)>50
  489.     If M(A)<70 : Add Y(A),70-M(A) : End If 
  490.     Add SX(A),Max(Min(SX-SX(A),50),-50)
  491.     Add SY(A),Max(Min(SY-SY(A),50),-50)
  492.   Else 
  493.     SY(A)=Min(SY(A)+4,300) : SY=SY(A) : Dec M(A)
  494.     If SY>250 and I(A)>7 and I(A)<13
  495.       M(A)=Max(M(A),51)
  496.     End If 
  497.   End If 
  498.   S=Sgn(RY(I(A))/85)
  499.   If M(A)>30 Then M(A)=Max(Min(M(A)+S*3-Abs(S),150),0)
  500.   If Fire(A)=0 Then SH(A)=0
  501.   If Fire(A) and SH(A)=0 and(Amreg(A*2,4)=1 or Amreg(A*2+1,4)=1)
  502.     SH(A)=1 : Sam Play K,5,8000 : Gosub CHCH
  503.     If Amreg(A*2,4)=1 : S=A*2 : Else S=A*2+1 : End If 
  504.     Amreg(S,0)=X(A)+SX(A)*2
  505.     Amreg(S,1)=Y(A)+SY(A)*2
  506.     Amreg(S,2)=RX(I(A))*6
  507.     Amreg(S,3)=RY(I(A))*6
  508.     Amreg(S,4)=0
  509.   End If 
  510. Return 
  511. Procedure RIPGRAPHICS
  512.   Load Iff "dh2:amosgfx/StrikeCommanderData16.iff",0
  513.   Colour 7,0
  514.   For A=0 To 74
  515.     Get Sprite A+1,(A mod 20)*16,(A/20)*16 To(A mod 20)*16+16,(A/20)*16+16
  516.     Hot Spot A+1,7,7
  517.   Next 
  518.   For A=0 To 7
  519.     Get Sprite 80+A,A*8,112 To A*8+7,122
  520.     Hot Spot 80+A,2,9
  521.   Next 
  522.   Get Sprite 98,224,48 To 232,50
  523.   Get Sprite 99,232,48 To 240,50
  524.   Get Sprite 100,0,152 To 320,250
  525.   Get Sprite 101,0,104 To 320,110
  526.   Get Sprite 102,0,64 To 64,93
  527.   Get Sprite 104,128,64 To 158,98
  528.   Hot Spot 104,19,0
  529. End Proc
  530. Procedure BETTERRAIN[R,L]
  531.   T=1 : AF=Rain(R,0)
  532.   For A=2 To L-1
  533.     Inc T
  534.     If(Rain(R,A)<>AF)
  535.       AF=Rain(R,A)
  536.       If T>3
  537.         Rain(R,A-2)=AF
  538.       End If 
  539.       T=0
  540.     End If 
  541.   Next 
  542. End Proc
  543. Procedure SAMSPEED[KANAL,FREQ]
  544.   RATE=3579545/FREQ
  545.   For A=0 To 3
  546.     If Btst(A,KANAL) Then Doke $DFF0A6+A*16,RATE
  547.   Next 
  548. End Proc